#coding=UTF-8
from datetime import datetime
from flask import render_template, flash, redirect,url_for,request
from flask_login import current_user, login_user, logout_user, login_required
from werkzeug.urls import url_parse
from app import  db
from app.auth.forms import LoginForm,RegistrationForm, ResetPasswordRequestForm, ResetPasswordForm
from app.models import User
from app.auth import bp
from app.auth.email import send_password_reset_email


@bp.route('/login', methods = ['GET', 'POST'])
def login():
    if current_user.is_authenticated:
	    return redirect(url_for('main.index'))
    form  = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username = form.username.data).first()
        if user is None or not user.check_password(form.password.data):
            flash('Invalid username or password')
            return redirect(url_for('auth.login'))

        login_user(user,remember=form.remember_me.data)
        next_page = request.args.get('next')

        if not next_page or url_parse(next_page).netloc != '':
            next_page = url_for('main.index')
        return redirect(next_page)
    return render_template('auth/login.html',title= 'Sign In',form = form)

@bp.route('/logout')
# user log out of the application
def logout():
	logout_user()
	return redirect(url_for('main.index'))

@bp.route('/register',methods = ['GET','POST'])
def register():
	if current_user.is_authenticated:
		return redirect(url_for('main.index'))
	form  = RegistrationForm()
	if form.validate_on_submit():
		user = User(username = form.username.data, email = form.email.data)
		user.set_password(form.password.data)
		db.session.add(user)
		db.session.commit()
		flash('Congratulations, you are now a registered user!')
		return redirect(url_for('auth.login'))
	return render_template('auth/register.html',title = 'Register', form = form)

@bp.route('/reset_password_request', methods = ['GET','POST'])
def reset_password_request():
	# 用户是否登陆
	if current_user.is_authenticated:
		return redirect(url_for('main.index'))
	form = ResetPasswordRequestForm()
	if form.validate_on_submit():
		user = Uers.query.filter_by(email = form.email.data).first()
		# 是否有邮箱
		if user:
			send_password_reset_email(user)
			flash('Check your email for the instructions to reset your password')
			return redirect(url_for('auth.login'))
		return render_template('auth/reset_password_request.html',title = 'Reset Password',form = form)

@bp.route('/reset_password/<token>',methods = ['GET','POST'])
def reset_password(token):
	if current_user.is_authenticated:
		return redirect(url_for('main.index'))
	user = User.verify_reset_password_token(token)
	if not user:
		return redirect(url_for('main.index'))
	form  = ResetPasswordForm()
	if form.validate_on_submit():
		user.set_password(form.password.data)
		db.session.commiit()
		flash('Your passsword has been reset.')
		return redirect(url_for('auth.login'))
	return render_template('auth/reset_password.html',form=form)
